#include <iostream>
#include <sstream>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <string.h>
#include <bitset>

#define REP(i, a, n) for(int i=a;i<=n;++i)
#define PER(i, a, n) for(int i=n;i>=a;--i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl '\n'
#define DB(a) ({REP(__i,1,n) cout<<a[__i]<<' ';hr;})
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int P = 1e9 + 7, INF = 0x3f3f3f3f;

ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }

ll qpow(ll a, ll n) {
    ll r = 1 % P;
    for (a %= P; n; a = a * a % P, n >>= 1)if ( n & 1 )r = r * a % P;
    return r;
}

ll inv(ll x) { return x <= 1 ? 1 : inv(P % x) * (P - P / x) % P; }

inline int rd() {
    int x = 0;
    char p = getchar();
    while (p < '0' || p > '9')p = getchar();
    while (p >= '0' && p <= '9')x = x * 10 + p - '0', p = getchar();
    return x;
}
//head



#ifdef ONLINE_JUDGE
const int N = 1e6+10;
#else
const int N = 111;
#endif

int n, m, q, fa[N], c[N], dep[N];
vector<int> g[N];

void dfs(int x, int f, int d) {
    dep[x] = d, fa[x] = f;
    for (int y: g[x]) if ( y != f ) dfs(y, x, d + 1);
}

int main() {
    int t;
    scanf("%d", &t);
    REP(cas, 1, t) {
        scanf("%d%d%d", &n, &m, &q);
        REP(i, 1, n) scanf("%d", c + i), g[i].clear();
        REP(i, 2, n) {
            int u, v;
            scanf("%d%d", &u, &v);
            g[u].pb(v), g[v].pb(u);
        }
        dfs(1, 0, 0);
        printf("Case %d:\n", cas);
        while (q--) {
            int u, v;
            scanf("%d%d", &u, &v);
            set<int> h;
            h.insert(c[u]);
            h.insert(c[v]);
            while (dep[u] != dep[v]) {
                if ( dep[u] < dep[v] ) swap(u, v);
                u = fa[u];
                h.insert(c[u]);
            }
            while (u != v) {
                u = fa[u], v = fa[v];
                h.insert(c[u]);
                h.insert(c[v]);
            }
            int f = 1;
            for (int t: h) {
                if ( f ) f = 0;
                else putchar(' ');
                printf("%d", t);
            }
            hr;
        }
    }
}
